#!/usr/bin/python

import os
import re

#Retorna un string con todos los archivos y sus respectivos directorios separados por ","
def obtenerArchivosAProcesar(path):
    archivos = ''
    if os.path.isdir(path):
        if path[-1] == "/":
            path = path[0:-1]
        #Aqui vamos a listar el contenido del directorio
        lista = os.listdir(path)
        #Recorremos el contenido del directorio y creamos la recursividad
        for valor in lista:
            d = obtenerArchivosAProcesar(os.path.join(path,valor))
            if d != None or d != '':
                archivos+= d
                    
                    
        return archivos 
    else:# os.path.isfile(path):
        return path + ','

def obtenerDirACrear(listaFicheros,pathOrigen,rutaDestino):
    urls = []
    if os.path.isdir(pathOrigen):
        #Validamos que las rutas vengan si la / al final de ellas
        if pathOrigen[-1] == "/":
            pathOrigen = pathOrigen[0:-1]
        if rutaDestino[-1] == "/":
            rutaDestino == rutaDestino[0:-1]
        for x in listaFicheros:
            url = ''
            for r in x.split('/')[0:-1]:
                url+= '%s/' % r
            
        
            if url != '':
                try:
                    #print '***', pathOrigen + '/',rutaDestino + '/',url ,'*****'
                    url = re.sub(pathOrigen + '/',rutaDestino + '/',url)
                    urls.index(url)
                except ValueError:
                    urls.append(url)
        
    return urls

def obtenerArchivosCrear(listaFicheros,pathOrigen,rutaDestino):
    ficheros = []
    if os.path.isdir(pathOrigen): 
        #Validamos que las rutas vengan si la / al final de ellas
        if pathOrigen[-1] == "/":
            pathOrigen = pathOrigen[0:-1]
        if rutaDestino[-1] == "/":
            rutaDestino == rutaDestino[0:-1]

        for l in listaFicheros:
            ficheros.append(re.sub(pathOrigen + '/',rutaDestino + '/',l))
    else:
        #Si la ruta origen es un archivo y no un directorio lo devemos tratar diferente
        nuevoOrigen = ''
        for o in pathOrigen.split('/')[1:-1]:
            nuevoOrigen+= '/' + o

        #print nuevoOrigen,rutaDestino, pathOrigen  
        ficheros.append(re.sub(nuevoOrigen + '/',rutaDestino + '/',pathOrigen))

    return ficheros

ruta = '/home/joger/FirmarCifrar/Archivo.5.txt'
rutaD = '/home/joger/Almacenado'
l = obtenerArchivosAProcesar(ruta).split(",")[0:-1]
l2 = obtenerDirACrear(l,ruta,rutaD)
l3 = obtenerArchivosCrear(l,ruta,rutaD)

print 'Archivos a Cifrar/Firmar'
print 'Numero de elementos: %s' % str(len(l))
for x in l:
    print x

print 'Directorios a crear'
print 'Numero de elementos: %s' % str(len(l2))
for x in l2:
    print x

print 'Ficheros a crear'
print 'Numero de elementos: %s' % str(len(l3))
for x in l3:
    print x


